from django.shortcuts import render
#
# # Create your views here.
#
#
# from fdfs_client.client import Fdfs_client
#
# #1、创建客户端，需要让客户端加载配置文件
# client =Fdfs_client('utils/fdfs/client.conf')
#
# #2、调用上传图片的方法
# client.upload_by_filename('/home/python/Desktop/images/2.jpg')
#
from goods.models import SKU
from goods.serializers import HotSerializer

"""
1、根据ui图或者原型 尽量多的分析字段
2、进行表和表之间的分析


"""


"""
1.Docker的架构是 C/S模式      客户端/服务器
2.Docker的镜像和容器

    镜像： 可以暂时理解为 安装系统的镜像
          还可以理解为  虚拟环境
     docker pull 镜像名            从远程服务器 把镜像 下载下来
     docker load -i 本机镜像路径        可以从本地加载
     docker save -o 保存名字.rar  镜像名
     docker images                  查看有那些镜像
     docker image rm 镜像名        删除镜像

    容器： 可以理解为 运行起来的 镜像（容器运行需要依赖于 镜像）
          可以依赖于一个镜像 创建很多个容器

        docker run [选项] 镜像名 [指令]
                    --name 名字  给容器起名字
                    -i          交互模式
                    -d          守护进程
                    -t          给它一个终端

        docker run -it ubuntu       -i 交互模式： 退出之后，容器就关闭了
        docker run -it ubuntu /bin/bash

        docker run -d  ubuntu       -d 守护进程： 在后台运行

        docker container ls --all       罗列所有的容器（包括在运行和未运行的）
        docker container ls             罗列在运行的容器

        docker container start/stop  容器id/容器名

        docker exec [选项] 容器名/容器id   命令          进入到正在运行的容器
        docker exec -it   容器id/容器名  /bin/bash

        docker container rm 容器id/容器名        只能删除已经停止的容器，
                                            强制删除需要加 -f


"""
# 在 python manage.py shell 中运行

# from fdfs_client.client import Fdfs_client
# #1、创建客户端，需要让客户端加载配置文件
# client = Fdfs_client('utils/fdfs/client.conf')
# #2、调用上传图片的方法
# client.upload_by_filename('/home/python/Desktop/images/2.jpg')

"""
1、分析首页需要进行功能的拆分 来获取数据
    分类数据在其他页面中都有展示
    首页商品信息 在商品表中
    这个时候，我们可以分为2个接口来实现数据的获取
        第一个接口：分类数据
        第二个接口：首页商品数据

2、首页访问量非常大
    会导致 我们的分类接口和首页商品数据接口 频繁访问
    就会直接导致 数据库经常查询这2类数据

3、我们优化这2个接口 因为数据不经常发生变化，所以我们可以采用缓存的处理
    解决用户的体验问题
        SEO  网站优化
        主要是抓取静态页面

4、对首页进行静态化处理
    ①先查询数据
    ②将查询的数据填充到html中
    ③我们把最新的赫塔缪勒文件放到指定的目录中

generate_static_index_html 生成静态文件的方法
定时任务

"""


"""
列表页面的需求分析
    1、需要让前端传递一个分类id
    2、热销数据个列表数据的展示 分为2个接口

热销数据的分析
    一、步骤
        ①后端接受分类id
        ②根据分类id进行数据查询，并且进行排序操作
        ③将对象列表转换为字典列表
        ④返回响应
    二、确定请求方式和路由
        GET /goods/categories/(?P<category_id>\d+)/hotskus/
    三、确定使用那个视图
        APIView
        GeneriAPIView
        ListAPIView/RetrieveAPIView

"""
from rest_framework.generics import ListAPIView

class HotSKUAPIView(ListAPIView):

    #热销视图不需要分页
    pagination_class = None

    serializer_class = HotSerializer

    def get_queryset(self):
        category_id = self.kwargs['category_id']

        return SKU.objects.filter(category_id=category_id).order_by('-sales')[:2]


"""
列表数据的获取
把这个分页抽取出去，让所有的分页的视图都采用这个分页类
分页的视图：
        APIView 没有分页
        GenericAPIView 及其他的子类有分页功能
"""

from rest_framework.filters import OrderingFilter
from rest_framework.pagination import LimitOffsetPagination,PageNumberPagination

from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView

class SKUAPIView(ListAPIView):

    serializer_class = HotSerializer

    # 添加排序
    filter_backends = [OrderingFilter]
    ordering_fields = ['sales','price','create_time']

    # 添加分页
    # pagination_class = CustomPageNumberPagination

    def get_queryset(self):
        category_id = self.kwargs['category_id']

        return SKU.objects.filter(category_id=category_id)

# class CustomPageNumberPagination(PageNumberPagination):
#
#     page_size = 2
#     page_size_query_param = 'page_size'


"""
1、列表数据 我们需要做静态化，因为分类数据基本很少发生变化
    当数据发生变化的时候，我们可以重新生成静态化页面

2、列表页面要做静态化，只是对分类做静态化
    通过ajax实现局部刷新 来获取 列表数据/热销数据

静态化页面：我们让用户去访问我们提前准备好的html页面
        这个html页面。是从数据库中查询出来的最新的数据

        ①先查询数据
        ②将查询的数据填充到html中
        ③我们把最新的html文件放到指定的目录中

"""
def generic_list():
    # ① 先查询数据
    # ② 将查询的数据 填充到 html中
    # ③ 我们把最新的html文件放到指定的目录中
    pass

"""
搜索引擎 是我们需要把数据组织好，之后给搜索引擎，让搜索引擎帮助我们进行分词处理

数据 --> haystack(需要在虚拟环境中执行 rebuild_index) --> elasticsearch

①数据
    我们组织好了数据之后，需要给elasticsearch
    我们不用自己写代码，我们可以借助于haystack来帮助我们完成 数据传递给elasticsearch

②需要有搜索引擎 （elasticsearch）通过docker来搭建



"""

from .serializers import SKUIndexSerializer
from drf_haystack.viewsets import HaystackViewSet

class SKUSearchViewSet(HaystackViewSet):
    """
    SKU搜索
    """
    index_models = [SKU]

    serializer_class = SKUIndexSerializer

















